<?php

class Application_Model_TimeMapper
{

    protected $_dbTable;

    public function  __construct()
    {
        $this->_dbTable = array();
    }

    public function setDBTable ($nomeClasseBD)
    {

        $tabelaBD = $nomeClasseBD;
        
        if (is_string($tabelaBD)) {
            $tabelaBD = new $tabelaBD();
        }
        if (!$tabelaBD instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Tabela invalida');
        }

        $this->_dbTable[$nomeClasseBD] = $tabelaBD;
        return $this;
    }

    public function getDBTable ($nomeTabelaBD)
    {
        $nomeClasseBD = 'Application_Model_DbTable_'.$nomeTabelaBD;
        if (!array_key_exists($nomeClasseBD, $this->_dbTable)) {
            $this->setDBTable($nomeClasseBD);
        }
        return $this->_dbTable[$nomeClasseBD];
    }

    /**
     * Insere um time no banco de dados.
     *
     * @param Application_Model_Time $jogo Modelo em memoria do time
     *
     */
    public function salvar (Application_Model_Time $time)
    {
        $dados = array(
            'nome'  => $time->getNome()
        );

        $this->getDbTable('Time')->insert($dados);

    }


    /**
     * Localiza e retorna todos os times que fazem parte de um determinado
     * campeonato, retornando um modelo em memoria para cada um dos times
     * localizados.
     *
     * @param <type> $campeonato_id identificador do campeonato
     *
     * @todo implementar!
     * @todo Esta funcao deve ser implementada utilizando stubs de campeonato,
     * ja que as respectivas tabelas não existem.
     */

    public function localizarPeloCampeonato ($campeonato_id)
    {
        $tabela = $this->getDBTable('CampeonatoTime');
        $select = $tabela->select();
        $select->from($tabela, '*')
               ->where('nome_campeonato = ?', $campeonato_id);

        $busca = $tabela->fetchAll($select);

        $resultado = array();

        foreach ($busca as $atual)
        {
            $resultado[] = new Application_Model_Time($atual['nome_time']);
        }

        return $resultado;
    }

    public function fetchAll ()
    {

        $tabela = $this->getDBTable('Time');

        $busca = $tabela->fetchAll();

        $resultado = array();

        foreach ($busca as $atual)
        {
            $resultado[] =  new Application_Model_Time($atual['nome']);
        }

        return $resultado;
    }


}

